home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_2 / areuh.tar / areuh / dump / adp.c < prev    next >
C/C++ Source or Header  |  1990-10-10  |  3KB  |  147 lines

  1. /*
  2.  * Authors :
  3.  *   Pierre DAVID (pda@masi.ibp.fr or pda@frunip62.bitnet)
  4.  *   Janick TAILLANDIER
  5.  *
  6.  * This program can be freely used or distributed as long as this
  7.  * note is kept.
  8.  *
  9.  * This program is provided "as is".
  10.  */
  11.  
  12. #include "common.h"
  13.  
  14. #define fgetl(lg,fp)  fread(&(lg),sizeof(long int),1,fp)
  15.  
  16. main (argc, argv)
  17. int argc ;
  18. char *argv[] ;
  19. {
  20.     FILE *fp ;
  21.     uchar line [MAXLEN + 1], hexvar[MAXLEN+1], type ;
  22.     saddr magic, pc, p2, p3, nu, nl, i, j, characteristic, value ;
  23.  
  24.     if (argc!=2)
  25.     {
  26.     fprintf (stderr, "usage: adp file\n") ;
  27.     exit (1) ;
  28.     }
  29.  
  30.     fp = fopen (argv[1], RAO_MODE) ;
  31.     if (fp==NULL)
  32.     {
  33.     fprintf (stderr, "adp: error opening %s\n", argv[1]) ;
  34.     exit (1) ;
  35.     }
  36.  
  37.     printf ("file %s : ", argv[1]) ;
  38.     fgetl (magic, fp) ;
  39.     if ((magic<AOF_MAGIC)||(magic>AO_MAGIC))
  40.     {
  41.     fprintf (stderr, "adp: %s is not an Areuh object file\n", argv [1]) ;
  42.     exit (1) ;
  43.     }
  44.     printf ("version %d\n", magic - AOF_MAGIC) ;
  45.     if (magic!=AO_MAGIC)
  46.     {
  47.     fprintf (stderr, "Wrong version\n") ;
  48.     exit (1) ;
  49.     }
  50.     fgetl (p2, fp) ;
  51.     fgetl (pc, fp) ;
  52.  
  53.     printf ("code: length (in nibbles) = %ld\n", pc) ;
  54.  
  55.     fseek (fp, p2, 0) ;
  56.     fgetl (p3, fp) ;
  57.     fgetl (nl, fp) ;
  58.  
  59.     printf ("public definitions : number = %ld\n", nl) ;
  60.     for (i=1; i<=nl; i++)
  61.     {
  62.     printf ("%4d:", i) ;
  63.     j = 0 ;
  64.     while ((line [j] = (uchar) getc (fp)) != '\n') j++ ;
  65.     line [j]= EOL ;
  66.     printf (" %-13s, val = ", line) ;     /* LBLLEN + 1 */
  67.     fgetl (value, fp) ;
  68.     if (value >= (saddr) 0)
  69.     {
  70.         hex5 (hexvar, value) ;
  71.         printf ("%s, ", hexvar) ;
  72.         type = getc (fp) ;
  73.         switch (type)
  74.         {
  75.         case LABS : printf ("Abs") ; break ;
  76.         case LREL : printf ("Rel") ; break ;
  77.         case LUDF : printf ("Udf") ; break ;
  78.         default : printf ("Type aie aie aie") ; break ;
  79.         }
  80.     }
  81.     else if (value == LBL_UDF)
  82.     {
  83.         printf ("-UDF-") ;
  84.     }
  85.     else if (value == LBL_IVL)
  86.     {
  87.         printf ("-IVL-") ;
  88.     }
  89.     else if (value == LBL_EXT)
  90.     {
  91.         printf ("-EXT-") ;
  92.     }
  93.     else if (value == LBL_XEQ)
  94.     {
  95.         printf ("-XEQ-") ;
  96.         fscanf (fp, "%s\n", line) ;
  97.         printf (", definition = %s", line) ;
  98.     }
  99.     else            /* (value == LBL_SEQ) */
  100.     {
  101.         printf ("-SEQ-") ;
  102.     }
  103.     printf ("\n") ;
  104.     }
  105.  
  106.     fgetl (nu, fp) ;
  107.     printf ("references not resolved: number = %d\n", nu) ;
  108.     for (i=1; i<=nu; i++)
  109.     {
  110.     fgetl (characteristic, fp) ;
  111.     fgetl (pc, fp) ;
  112.     fscanf (fp, "%s\n", line) ;
  113.     printf ("%4d:", i) ;
  114.     hex5 (hexvar, pc) ;
  115.     printf (" pc = %s", hexvar) ;
  116.     printf (", type = ") ;
  117.     switch ((int) (characteristic & 0xf0))
  118.     {
  119.         case XABSL : printf ("XABSL") ; break ;
  120.         case XABSO : printf ("XABSO") ; break ;
  121.         case XRGTO : printf ("XRGTO") ; break ;
  122.         case XRGSB : printf ("XRGSB") ; break ;
  123.     }
  124.     printf (", length = %1d", characteristic & 0xf) ;
  125.     printf (", val = %s\n", line) ;
  126.     }
  127. }
  128.  
  129.  
  130. /* function called indirectly, via hex5 */
  131.  
  132. format_hex (str, val, dig)
  133. uchar *str ;
  134. saddr val ;
  135. int dig ;
  136. {
  137.     register int i, h ;
  138.  
  139.     for (i=dig-1; i>=0; i--)
  140.     {
  141.     h = (int) (val & ((saddr) 0xf)) ;
  142.     str [i] = h + ((h < 10) ? '0' : 'A' - 10) ;
  143.     val >>= 4 ;
  144.     }
  145.     str [dig] = EOL ;
  146. }
  147.